package com.xiangxiao.rpan.authority.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiangxiao.rpan.authority.constant.GlobalConsts;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @author xiangxiao
 * email: 573768011@qq.com
 * date: 2022/11/4 10:18
 */
@Data
public class UserDto implements Serializable {
  private static final long serialVersionUID = -5451014210455950081L;
  private Long id;

  /**
   * 姓名
   */
  private String name;

  /**
   * 登录账户名
   */
  private String login;

  /**
   * 用户头像
   */
  private String imageUrl;

  /**
   * 年龄
   */
  private Integer age;

  /**
   * 性别
   */
  private Byte gender;

  /**
   * 删除状态:删除标志位(1表示是,0表示否)
   */
  private Byte deletedFlg;

  /**
   * 用户类别(0表示oms添加,1表示用户添加,默认值为0)
   */
  private Byte type;

  /**
   * 账号的状态(0：停用 1：启用)
   */
  private Byte status;

  /**
   * 组织机构id
   */
  private Long orgId;

  /**
   * 区域ids, 1.1.2版本后区域和单位(组织)取消挂钩, 用户关联多个区域
   */
  private List<Long> areaIds;

  /**
   * 设备ids, 1.1.3版本后用户不仅和区域挂钩还和机体设备挂钩
   */
  private List<Long> sourceIds;

  /**
   * 角色id(用,隔开)
   */
  private String roleIdList;

  /**
   * 密码
   */
  private String password;

  /**
   * 新密码
   */
  private String newPassword;

  /**
   * 有效时间段：开始时间
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date startTime;

  /**
   * 有效时间段：失效时间
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date endTime;

  /**
   * 联系方式
   */
  private String phone;

  /**
   * 邮箱地址
   */
  private String email;

  /**
   * 备注
   */
  private String remark;

  /**
   * 扩展字段
   */
  private String expandField1;

  /**
   * 是否进行角色验证
   */
  private Boolean doVerify = Boolean.TRUE;

  /**
   * 是否已经过期失效(0未过期; 1已过期)
   */
  private Integer expired;

  /**
   * 用户登录次数
   */
  private Long loginTimes;

  /**
   * 用户等级0普通管理员; 1超级管理员;2普通管理员级别
   */
  private Integer level;

  /**
   * 权限验证类型
   * 1.根据模块数量是否有包含关系来验证权限大小,默认这个
   * 2.根据是否有账号管理接口验证权限大小
   */
  private int authorityType = GlobalConsts.AUTHORITY_TYPE_BY_MODULES;

  /**
   * 验证码
   */
  private String captchaCode;

  /**
   * 是否注册，true:是  false:不是，默认
   */
  private Boolean register = Boolean.FALSE;

  /**
   * 注册类型：0默认账号注册;1邮箱注册;2手机注册
   */
  private int registryType = REGISTRY_TYPE_ACCOUNT;

  /**
   * 注册类型
   */
  public static final int REGISTRY_TYPE_ACCOUNT = 0;
  public static final int REGISTRY_TYPE_EMAIL = 1;
  public static final int REGISTRY_TYPE_PHONE = 2;

  /**
   * 数据权限开关
   */
  public boolean dataAccessEnable = true;

  /**
   * app客户端
   */
  public boolean appClient = false;

  public List<Long> userIdList;

  /**
   * app端的权限
   */
  private List<Long> appFuncIds;
}
